const express = require('express');
const router = express.Router();
const bcrypt = require('bcrypt');
const db = require('../db');

// 注册用户
router.post('/register', async (req, res) => {
  try {
    const { username, password, email } = req.body;
    
    // 验证必填字段
    if (!username || !password) {
      return res.status(400).json({ error: '用户名和密码是必需的' });
    }
    
    // 检查用户是否已存在
    const existingUser = await db.getUserByUsername(username);
    if (existingUser) {
      return res.status(400).json({ error: '用户名已存在' });
    }
    
    // 创建新用户
    const user = await db.createUser({ username, password, email });
    
    // 创建会话
    req.session.userId = user.id;
    
    // 返回用户信息（不包含密码）
    res.status(201).json({
      id: user.id,
      username: user.username,
      email: user.email
    });
  } catch (error) {
    console.error('注册错误:', error);
    res.status(500).json({ error: '注册失败，请稍后重试' });
  }
});

// 登录用户
router.post('/login', async (req, res) => {
  try {
    const { username, password } = req.body;
    
    // 验证必填字段
    if (!username || !password) {
      return res.status(400).json({ error: '用户名和密码是必需的' });
    }
    
    // 查找用户
    const user = await db.getUserByUsername(username);
    if (!user) {
      return res.status(401).json({ error: '用户名或密码不正确' });
    }
    
    // 验证密码
    const isPasswordValid = await bcrypt.compare(password, user.password);
    if (!isPasswordValid) {
      return res.status(401).json({ error: '用户名或密码不正确' });
    }
    
    // 创建会话
    req.session.userId = user.id;
    
    // 返回用户信息（不包含密码）
    res.json({
      id: user.id,
      username: user.username,
      email: user.email
    });
  } catch (error) {
    console.error('登录错误:', error);
    res.status(500).json({ error: '登录失败，请稍后重试' });
  }
});

// 获取当前用户信息
router.get('/me', async (req, res) => {
  try {
    if (!req.session.userId) {
      return res.status(401).json({ error: '未授权' });
    }
    
    const user = await db.getUserById(req.session.userId);
    if (!user) {
      return res.status(401).json({ error: '未授权' });
    }
    
    res.json(user);
  } catch (error) {
    console.error('获取用户信息错误:', error);
    res.status(500).json({ error: '获取用户信息失败' });
  }
});

// 登出用户
router.post('/logout', (req, res) => {
  req.session.destroy(err => {
    if (err) {
      console.error('登出错误:', err);
      return res.status(500).json({ error: '登出失败' });
    }
    res.json({ message: '已成功登出' });
  });
});

module.exports = router; 